home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / lwres / ipv6.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-09-17  |  3.3 KB  |  125 lines

  1. /*
  2.  * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
  3.  * Copyright (C) 2000, 2001  Internet Software Consortium.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software for any
  6.  * purpose with or without fee is hereby granted, provided that the above
  7.  * copyright notice and this permission notice appear in all copies.
  8.  *
  9.  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10.  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11.  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13.  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14.  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15.  * PERFORMANCE OF THIS SOFTWARE.
  16.  */
  17.  
  18. /* $Id: ipv6.h,v 1.10.18.2 2005/04/29 00:17:21 marka Exp $ */
  19.  
  20. #ifndef LWRES_IPV6_H
  21. #define LWRES_IPV6_H 1
  22.  
  23. /*****
  24.  ***** Module Info
  25.  *****/
  26.  
  27. /*! \file ipv6.h
  28.  * IPv6 definitions for systems which do not support IPv6.
  29.  */
  30.  
  31. /***
  32.  *** Imports.
  33.  ***/
  34.  
  35. #include <lwres/int.h>
  36. #include <lwres/platform.h>
  37.  
  38. /***
  39.  *** Types.
  40.  ***/
  41.  
  42. /*% in6_addr structure */
  43. struct in6_addr {
  44.         union {
  45.         lwres_uint8_t    _S6_u8[16];
  46.         lwres_uint16_t    _S6_u16[8];
  47.         lwres_uint32_t    _S6_u32[4];
  48.         } _S6_un;
  49. };
  50. /*@{*/
  51. /*% IP v6 types */
  52. #define s6_addr        _S6_un._S6_u8
  53. #define s6_addr8    _S6_un._S6_u8
  54. #define s6_addr16    _S6_un._S6_u16
  55. #define s6_addr32    _S6_un._S6_u32
  56. /*@}*/
  57.  
  58. #define IN6ADDR_ANY_INIT     {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}}
  59. #define IN6ADDR_LOOPBACK_INIT     {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }}}
  60.  
  61. LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_any;
  62. LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_loopback;
  63.  
  64. /*% used in getaddrinfo.c and getnameinfo.c */
  65. struct sockaddr_in6 {
  66. #ifdef LWRES_PLATFORM_HAVESALEN
  67.     lwres_uint8_t        sin6_len;
  68.     lwres_uint8_t        sin6_family;
  69. #else
  70.     lwres_uint16_t        sin6_family;
  71. #endif
  72.     lwres_uint16_t        sin6_port;
  73.     lwres_uint32_t        sin6_flowinfo;
  74.     struct in6_addr        sin6_addr;
  75.     lwres_uint32_t        sin6_scope_id;
  76. };
  77.  
  78. #ifdef LWRES_PLATFORM_HAVESALEN
  79. #define SIN6_LEN 1
  80. #endif
  81.  
  82. /*% in6_pktinfo structure */
  83. struct in6_pktinfo {
  84.     struct in6_addr ipi6_addr;    /*%< src/dst IPv6 address */
  85.     unsigned int    ipi6_ifindex; /*%< send/recv interface index */
  86. };
  87.  
  88. /*!
  89.  * Unspecified IPv6 address
  90.  */
  91. #define IN6_IS_ADDR_UNSPECIFIED(a)      \
  92.         (((a)->s6_addr32[0] == 0) &&    \
  93.          ((a)->s6_addr32[1] == 0) &&    \
  94.          ((a)->s6_addr32[2] == 0) &&    \
  95.          ((a)->s6_addr32[3] == 0))
  96.  
  97. /*
  98.  * Loopback
  99.  */
  100. #define IN6_IS_ADDR_LOOPBACK(a)         \
  101.         (((a)->s6_addr32[0] == 0) &&    \
  102.          ((a)->s6_addr32[1] == 0) &&    \
  103.          ((a)->s6_addr32[2] == 0) &&    \
  104.          ((a)->s6_addr32[3] == htonl(1)))
  105.  
  106. /*
  107.  * IPv4 compatible
  108.  */
  109. #define IN6_IS_ADDR_V4COMPAT(a)         \
  110.         (((a)->s6_addr32[0] == 0) &&    \
  111.          ((a)->s6_addr32[1] == 0) &&    \
  112.          ((a)->s6_addr32[2] == 0) &&    \
  113.          ((a)->s6_addr32[3] != 0) &&    \
  114.          ((a)->s6_addr32[3] != htonl(1)))
  115.  
  116. /*
  117.  * Mapped
  118.  */
  119. #define IN6_IS_ADDR_V4MAPPED(a)               \
  120.         (((a)->s6_addr32[0] == 0) &&          \
  121.          ((a)->s6_addr32[1] == 0) &&          \
  122.          ((a)->s6_addr32[2] == htonl(0x0000ffff)))
  123.  
  124. #endif /* LWRES_IPV6_H */
  125.